協調記錄: m03.getNextTransferStation() 接口阻塞
問題摘要
| 項目 | 內容 |
|---|---|
| 阻塞接口 | m03.LocationService.getNextTransferStation() |
| 受影響模塊 | m01-狀態感知引擎 |
| 請求人 | @backend-1 |
| 負責人 | @backend-2 |
| 發現時間 | 2026-03-08 12:00 |
| 截止時間 | 2026-03-08 16:00 (4小時) |
| 當前狀態 | 🔴 阻塞中 |
問題描述
背景
m01-狀態感知引擎在實現L2提醒觸發邏輯時,需要知道用戶距離下一換乘站的距離和預計到達時間,以決定是否觸發「距離1站提醒」。
阻塞詳情
- @backend-1 在
m01.detectState()中需要調用getNextTransferStation() - 該接口目前未定義文檔,也未實現
- m01開發因此暫停
架構分析
職責歸屬分析
| 方案 | 歸屬 | 優點 | 缺點 | 評估 |
|---|---|---|---|---|
| A | m03提供 ⭐ | 地圖數據在m03,專業GIS處理 | m03需依賴外部地圖API | ✅ 推薦 |
| B | m01自己計算 | 不依賴m03,減少調用 | 地圖數據重複,維護困難 | ⚠️ 兜底方案 |
| C | 新建m06專用服務 | 職責單一 | 增加複雜度,當前不需要 | ❌ 否決 |
決策:方案A - 由m03提供
理由: 1. 單一職責: 地圖數據和路線計算應集中管理 2. 數據一致性: m03已有OD矩陣和路線數據 3. 可複用性: m02提醒服務未來可能也需要此接口 4. 性能優化: m03可緩存熱門路線計算結果
接口定義(架構師確認版)
接口規範
service: LocationService
method: getNextTransferStation
provider: m03
consumer: m01, m02
version: "1.0.0"
請求/響應
Request:
{
userId: string; // 用戶ID
currentLocation: {
lat: number; // 緯度
lng: number; // 經度
accuracy: number; // GPS精度(米)
};
route?: { // 可選:已知路線信息
lineId?: string; // 路線ID
direction?: number; // 方向
};
context?: {
speed: number; // 當前速度(km/h)
timestamp: number; // 時間戳
};
}
Response:
{
// 下一換乘站信息
nextStation: {
id: string; // 站點ID
name: string; // 站點名稱
nameEn?: string; // 英文名稱
location: {
lat: number;
lng: number;
};
type: "metro" | "bus" | "train";
};
// 距離信息
distance: {
meters: number; // 直線距離(米)
routeMeters?: number; // 路線距離(米,可選)
stations: number; // 剩余站數
};
// 預計到達
eta: {
seconds: number; // 預計秒數
confidence: number; // 置信度 0-1
};
// 提醒觸發建議(供m01參考)
alertTrigger: {
shouldAlert: boolean; // 是否應該觸發提醒
reason: "approaching" | "arriving" | "none";
urgency: "low" | "medium" | "high";
};
// 元數據
meta: {
calculatedAt: number; // 計算時間戳
cacheHit: boolean; // 是否命中緩存
dataVersion: string; // 地圖數據版本
};
}
Error Codes:
{
"M03_E001": "無法定位到有效路線",
"M03_E002": "地圖數據缺失",
"M03_E003": "計算超時",
"M03_E004": "位置精度不足"
}
行動計劃
Phase 1: 文檔交付(截止時間: 16:00)
| 時間 | 任務 | 負責人 | 狀態 |
|---|---|---|---|
| 12:00 | 發現阻塞,通知架構師 | @backend-1 | ✅ 完成 |
| 12:30 | 架構確認接口歸屬 | @architect-lead | ✅ 完成 |
| 12:30 | 發布接口定義給m03 | @architect-lead | ✅ 完成 |
| 14:00 | @backend-2 確認排期 | @backend-2 | ⏳ 待確認 |
| 16:00 | 接口文檔交付 | @backend-2 | ⏳ 截止 |
Phase 2: 實現交付(預計)
| 時間 | 任務 | 負責人 |
|---|---|---|
| 3/9 12:00 | Mock接口提供 | @backend-2 |
| 3/10 18:00 | 真實實現 | @backend-2 |
| 3/11 12:00 | 聯調測試 | @backend-1 + @backend-2 |
兜底方案(超時觸發)
觸發條件
如 2026-03-08 16:00 前 @backend-2 未完成文檔,則啟動兜底方案
方案B: m01臨時實現
實現方式:
// m01 臨時降級方案
class TemporaryStationCalculator {
// 使用簡化算法估算
// 1. 查詢最近的已知站點(緩存)
// 2. 基於速度和方向粗略估計
// 3. 精度降低,但不阻塞主流程
async getNextTransferStationFallback(
userId: string,
location: LatLng
): Promise<StationInfo | null> {
// 簡化實現
}
}
權衡: - ✅ m01開發不阻塞 - ✅ 可快速上線測試 - ❌ 精度較低(約70%準確率) - ❌ 無法處理複雜換乘場景 - ❌ 技術債:需後續遷移到m03
檢查清單
架構師跟進項
- [x] 確認職責歸屬
- [x] 定義接口規範
- [ ] 14:00 檢查 @backend-2 響應
- [ ] 16:00 檢查文檔交付
- [ ] 超時後決定是否啟動兜底方案
m03 (@backend-2) 交付項
- [ ] 確認排期響應
- [ ] 接口文檔 (docs/03-interface.md)
- [ ] 數據模型更新
- [ ] 外部地圖API調研
m01 (@backend-1) 準備項
- [ ] 閱讀確認接口定義
- [ ] 準備Mock測試用例
- [ ] 預留兜底方案接入點
溝通記錄
2026-03-08 12:00
@backend-1 → @architect-lead:
發現阻塞:我需要調用
getNextTransferStation()來判斷L2提醒時機,但m03沒有這個接口。請協調。
2026-03-08 12:30
@architect-lead → @backend-1, @backend-2:
已確認該接口應由m03提供。接口定義見上文。 @backend-2 請確認是否可在16:00前交付文檔?如有困難請及時反饋。
🐿️ 松鼠提醒項目 | 架構師 @architect-lead
正在協調 m03 接口阻塞問題
- 已確認接口歸屬:m03
- 已定義接口規範(見上文)
- 檢查時間:14:00, 16:00
- 兜底方案:m01臨時實現(精度降級)